<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 3.请描述下面代码的输出结果以及运行原因
        var num = 1;
        function demo() {
            //提升变量
            //var num
            console.log(num);
            function demoSon() {
                console.log(num);
                num = 3;
                console.log(num);
            }
            var num = 2
            demoSon();
        }
        demo();
        /*
            1.输出undefined
            第一步： 在预解析的作用下，在全局作用域提升 var num，function demo（） 的优先级然后赋值了num = 1，最后调用了函数demo（）
                    进入demo函数内部，提升demo局部作用域里的var num，function demoSon（）的优先级，然后在demo局部作用域打印了log（num），此时num尚未赋值
                    ***所以输出为undefined
            2.输出2
            第二步： 然后赋值了num = 2，再调用了demoSon（）函数，进入demoSon函数内部，由于demoSon（）内部没有可提升的声明变量和函数
                    所以代码依次执行，输出num，num遵循作用域链的机制，在本级作用域没有找到num，继续往上一级寻找，找到了上一级的num = 2，
                    ***所以输出一个 2
            3.输出3
            第三步： 继续执行num = 3，log（num）
                    ***最后输出一个 3

           
           

         */
    </script>
</head>

<body>

</body>

</html>